package com.agile.leetcode.redenvelope;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;

/**
 *  整体金额随机法的公式：红包总额 * 随机数/随机数总和，这个方法的核心是使用一个随机数作为红包瓜分的标准，
 * 这个随机数是通过Random类随机产生的。他的随机性就比较大了，看起来好像是和我们平时抢红包差不多，
 * 但是微信红包也不是采用这种方法，因为这种的随机性太大了，不是很公平。
 *
 * @Author:ChenZhangKun
 * @Date: 2022/1/24 16:40
 */
public class SecondFunction {
    private static void testPocket2(BigDecimal amount, BigDecimal min, BigDecimal num) {
        final Random random = new Random();
        final int[] rand = new int[num.intValue()];
        BigDecimal sum1 = BigDecimal.ZERO;
        BigDecimal redpeck;
        int sum = 0;
        for (int i = 0; i < num.intValue(); i++) {
            rand[i] = random.nextInt(100);
            sum += rand[i];
        }
        final BigDecimal bigDecimal = new BigDecimal(sum);
        BigDecimal remain = amount.subtract(min.multiply(num));
        for (int i = 0; i < rand.length; i++) {
            if (i == num.intValue() - 1) {
                redpeck = remain;
            } else {
                redpeck = remain.multiply(new BigDecimal(rand[i])).divide(bigDecimal, 2, RoundingMode.FLOOR);
            }
            if (remain.compareTo(redpeck) > 0) {
                remain = remain.subtract(redpeck);
            } else {
                remain = BigDecimal.ZERO;
            }
            sum1 = sum1.add(min.add(redpeck)).setScale(2, BigDecimal.ROUND_HALF_UP);
            System.out.println("第" + (i + 1) + "个人抢到红包金额为：" + min.add(redpeck).setScale(2, BigDecimal.ROUND_HALF_UP));
        }

        System.out.println("红包总额：" + sum1);
    }

    // 测试代码
    public static void main(String[] args) {
        BigDecimal amount = new BigDecimal(100).setScale(2, BigDecimal.ROUND_HALF_UP);
        BigDecimal min = new BigDecimal(0.01).setScale(2, BigDecimal.ROUND_HALF_UP);
        BigDecimal num = new BigDecimal(10).setScale(2, BigDecimal.ROUND_HALF_UP);
        testPocket2(amount, min, num);
    }

}
